/**
 * Author wln
 * Date 2020年12月21日13:54:55
 * Desc 数据工具函数
 */

/**
 * 查找节点
 * @params
 * element -> 查询节点名称 class or id
 */
export function BcQuery(elementName) {
    if (!elementName) {
        console.error('elementName parameter is required')
        return
    }
    let name = elementName.slice(1)
    if(/^\./.test(elementName)){
        return document.getElementsByClassName(name)
    } else if(/^#/.test(elementName)) {
        return document.getElementById(name)
    } else {
        console.error('elementName, parameter format error')
    }
}

/**
 * 匹配指定的父级元素
 * @params
 * currentElement -> 当前节点
 * elementName -> 匹配的父级节点名称
 * cutElement -> 截止匹配节点名称
 */
export function BcParents(currentElement,elementName,cutElement = 'BODY') {
    if (!currentElement || !elementName) {
        console.error('[currentElement,elementName] parameter is required')
        return
    }
    let name = elementName.slice(1),
        pelement = null,
        isOver = false
    // 当前节点
    if(typeof currentElement == 'object' ){
        pelement = currentElement.parentElement
    } else if(typeof currentElement == 'string') {
        if(/^\./.test(cutElement)){
            pelement = document.getElementsByClassName(currentElement).parentElement
        } else if(/^#/.test(cutElement)) {
            pelement = document.getElementById(currentElement).parentElement
        }
    }
    // 截止节点
    if(/^\./.test(cutElement)){
        if(pelement.className.split(' ').includes(cutElement)) isOver = true
    } else if(/^#/.test(cutElement)) {
        if(pelement.id == cutElement) isOver = true
    } else {
        if(pelement.tagName == cutElement) isOver = true
    }
    // 匹配父级节点
    if (pelement && !isOver) {
        if (/^\./.test(elementName)) {
            if (pelement.className.split(' ').includes(name))
                return pelement
            else
                // 递归需要return参数时，需要包函数调用return回去，不然接接不到参数
                // 下面代码等同于 return pelement ， 因为 BcParents(pelement, elementName) == return pelement
                return BcParents(pelement, elementName)
        } else if (/^#/.test(elementName)) {
            if (pelement.id == name)
                return pelement
            else
                return BcParents(pelement, elementName)
        }
    } else {
        return null
    }
}
